/**
 * ......................我佛慈悲......................
 *                       _oo0oo_
 *                      o8888888o
 *                      88" . "88
 *                      (| -_- |)
 *                      0\  =  /0
 *                    ___/`---'\___
 *                  .' \\|     |// '.
 *                 / \\|||  :  |||// \
 *                / _||||| -卍-|||||- \
 *               |   | \\\  -  /// |   |
 *               | \_|  ''\---/''  |_/ |
 *               \  .-\__  '-'  ___/-. /
 *             ___'. .'  /--.--\  `. .'___
 *          ."" '<  `.___\_<|>_/___.' >' "".
 *         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
 *         \  \ `_.   \_ __\ /__ _/   .-` /  /
 *     =====`-.____`.___ \_____/___.-`___.-'=====
 *                       `=---='
 *                        
 *..................佛祖开光 ,永无BUG...................
 */

//主引导程序，启动时由硬件加载运行，然后完成对二级引导程序loader的加载
//该部分程序存储于磁盘的第1个扇区，在计算机启动时将会由BIOS加载到0x7c00处
//之后，将由BIOS跳转至0x7c00处开始运行

//16位代码
  	.code16
 	.text
	.global _start
	.extern boot_entry
_start:
	//初始化寄存器
  	mov $0 , %ax
    mov %ax, %ds
    mov %ax, %ss
    mov %ax, %es
    mov %ax, %fs
    mov %ax, %gs

	mov $_start , %sp
read:
	//加载二级引导程序进入内存
	//使用BIOS中断
	//AH=02H,AL=扇区数,CH=柱面,CL=扇区
	//DH=磁头,DL=驱动器,ES:BX 加载到的内存地址
    mov $0x8000, %bx
	mov $0x2, %ah
	mov $0x2, %cx
	mov $64,  %al
	mov $0x80, %dx
    int $0x13
    //CF=0 操作成功
	jc read
    
	//进入C语言环境
	jmp boot_entry
		
	//引导结束段
	.section boot_end, "ax"

boot_sig: .byte 0x55, 0xaa